home *** CD-ROM | disk | FTP | other *** search
- package com.extensibility.rock;
-
- import java.io.BufferedInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.DataInputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FilterInputStream;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import java.util.Vector;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipFile;
- import java.util.zip.ZipInputStream;
-
- public class FileLoader extends ClassLoader {
- private Hashtable classToFile;
- private boolean cancelled;
- File orgFile;
- File nextFileLoc;
- String orgClass;
- String rootDir;
- UserLocator locator;
-
- public FileLoader(File var1) {
- this.classToFile = new Hashtable();
- this.orgFile = var1;
- this.nextFileLoc = var1;
- }
-
- private String getOrgFile() {
- return this.orgFile.getPath();
- }
-
- private String getOrgFileDir() {
- return this.orgFile.isDirectory() ? this.orgFile.getPath() : this.orgFile.getParent();
- }
-
- public FileLoader(File var1, UserLocator var2) {
- this(var1);
- this.locator = var2;
- }
-
- public boolean sourceIsArchive() {
- return this.isArchive(this.orgFile);
- }
-
- public boolean sourceIsClassFile() {
- return this.isClassFile(this.orgFile);
- }
-
- private boolean isArchive(File var1) {
- String var2 = var1.getPath().toLowerCase();
- return var2.endsWith(".zip") || var2.endsWith(".jar");
- }
-
- private boolean isClassFile(File var1) {
- return var1.getPath().toLowerCase().endsWith(".class");
- }
-
- public Enumeration getClasses() {
- return this.getClassesFromArchive(this.orgFile);
- }
-
- private Enumeration getClassesFromArchive(File var1) {
- Vector var2 = new Vector();
-
- try {
- ZipInputStream var3 = new ZipInputStream(new FileInputStream(var1));
-
- while(true) {
- ZipEntry var8 = var3.getNextEntry();
- if (var8 == null) {
- var3.close();
- return var2.elements();
- }
-
- String var5 = var8.getName();
- var5 = var5.replace('/', '.');
- if (var5.endsWith(".class")) {
- String var6 = strip(var5.substring(0, var5.length() - 6));
- var2.addElement(var6);
- this.classToFile.put(var6, var1);
- }
- }
- } catch (IOException var7) {
- Object var4 = null;
- return (Enumeration)var4;
- }
- }
-
- protected byte[] loadJarBytes(File var1, String var2) throws IOException {
- String var3 = String.valueOf(var2.replace('.', '/')).concat(String.valueOf(".class"));
- byte[] var4 = null;
- ZipFile var5 = new ZipFile(var1);
- Enumeration var6 = var5.entries();
-
- while(var6.hasMoreElements()) {
- ZipEntry var7 = (ZipEntry)var6.nextElement();
- String var8 = var7.getName();
- if (var8.equals(var3)) {
- var4 = new byte[1024];
- BufferedInputStream var9 = new BufferedInputStream(var5.getInputStream(var7));
- ByteArrayOutputStream var10 = new ByteArrayOutputStream();
-
- int var11;
- while((var11 = ((FilterInputStream)var9).read(var4)) != -1) {
- var10.write(var4, 0, var11);
- }
-
- ((FilterInputStream)var9).close();
- var4 = new byte[var10.size()];
- var4 = var10.toByteArray();
- ((OutputStream)var10).close();
- break;
- }
- }
-
- return var4;
- }
-
- public byte[] loadBytesFromFile(File var1) throws IOException {
- DataInputStream var2 = new DataInputStream(new FileInputStream(var1));
- int var3 = ((FilterInputStream)var2).available();
- byte[] var4 = new byte[var3];
- var2.readFully(var4);
- return var4;
- }
-
- public static String strip(String var0) {
- int var1 = var0.indexOf(".COM.");
- int var2 = var0.indexOf(".com.");
- int var3 = var0.indexOf(".org.");
- int var4 = var0.indexOf(".net.");
- int var5 = Math.max(var2, Math.max(var1, Math.max(var3, var4)));
- return var5 >= 0 ? var0.substring(var5 + 1) : var0;
- }
-
- public String qualifyName(File var1) {
- String var2 = var1.getName().substring(0, var1.getName().indexOf(".class"));
- if (var2.indexOf(46) < 0) {
- String var3 = this.orgFile.getParent();
- int var4 = var3.indexOf(String.valueOf(String.valueOf(File.separator).concat(String.valueOf("COM"))).concat(String.valueOf(File.separator)));
- int var5 = var3.indexOf(String.valueOf(String.valueOf(File.separator).concat(String.valueOf("com"))).concat(String.valueOf(File.separator)));
- int var6 = var3.indexOf(String.valueOf(String.valueOf(File.separator).concat(String.valueOf("org"))).concat(String.valueOf(File.separator)));
- int var7 = var3.indexOf(String.valueOf(String.valueOf(File.separator).concat(String.valueOf("net"))).concat(String.valueOf(File.separator)));
- int var8 = Math.max(var5, Math.max(var4, Math.max(var6, var7)));
- if (var8 >= 0) {
- String var9 = var3.substring(var8 + 1);
- var9 = var9.replace(File.separatorChar, '.');
- return String.valueOf(String.valueOf(var9).concat(String.valueOf('.'))).concat(String.valueOf(var2));
- }
- }
-
- return var2;
- }
-
- public String getClassFilePath(String var1) {
- if (this.rootDir != null) {
- return String.valueOf(String.valueOf(this.rootDir).concat(String.valueOf(var1.replace('.', File.separatorChar)))).concat(String.valueOf(".class"));
- } else {
- boolean var3 = var1.indexOf(46) >= 0;
- if (var3) {
- String var4 = var1.substring(0, var1.lastIndexOf(46)).replace('.', File.separatorChar);
- int var5 = this.getOrgFile().indexOf(var4);
- if (var5 < 0) {
- return null;
- } else {
- this.rootDir = this.getOrgFile().substring(0, var5);
- return this.getClassFilePath(var1);
- }
- } else {
- return String.valueOf(String.valueOf(String.valueOf(this.getOrgFileDir()).concat(String.valueOf(File.separatorChar))).concat(String.valueOf(var1))).concat(String.valueOf(".class"));
- }
- }
- }
-
- private Class classFromKnownArchive(String var1) throws IOException {
- Class var2 = null;
- File var3 = (File)this.classToFile.get(var1);
- if (var3 != null) {
- byte[] var4 = this.loadJarBytes(var3, var1);
- if (var4 != null) {
- var2 = ((ClassLoader)this).defineClass((String)null, var4, 0, var4.length);
- }
- }
-
- return var2;
- }
-
- private Class loadClassFromFile(File var1, String var2) throws IOException {
- Class var3 = this.classFromKnownArchive(var2);
- if (var3 != null) {
- return var3;
- } else {
- if (var1 != null && this.isArchive(var1)) {
- this.getClassesFromArchive(var1);
- var3 = this.classFromKnownArchive(var2);
- } else {
- byte[] var4 = null;
- String var5 = this.getClassFilePath(var2);
- File var6 = null;
- if (var5 != null) {
- var6 = new File(var5);
- }
-
- if (var6 != null && var6.exists()) {
- var4 = this.loadBytesFromFile(var6);
- } else if (var1 != null) {
- var4 = this.loadBytesFromFile(var1);
- }
-
- if (var4 != null) {
- var3 = ((ClassLoader)this).defineClass((String)null, var4, 0, var4.length);
- }
- }
-
- return var3;
- }
- }
-
- public Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
- Object var3 = null;
-
- try {
- Class var12 = ((ClassLoader)this).findSystemClass(var1);
- if (var12 != null) {
- return var12;
- }
- } catch (Exception var9) {
- }
-
- if (var1.startsWith("java.")) {
- throw new ClassNotFoundException();
- } else {
- Class var13 = ((ClassLoader)this).findLoadedClass(var1);
- if (var13 != null) {
- return var13;
- } else {
- boolean var4 = this.orgClass == null;
- if (var4) {
- this.orgClass = var1;
- }
-
- Class var5 = null;
- Object var6 = null;
-
- try {
- boolean var7 = false;
- var5 = this.classFromKnownArchive(var1);
-
- while(var5 == null && !var7) {
- File var8 = this.nextFileLoc;
- this.nextFileLoc = null;
- var5 = this.loadClassFromFile(var8, var1);
- if (var5 == null) {
- this.nextFileLoc = this.locator.getNextLocation(var1);
- if (this.nextFileLoc == null) {
- var7 = true;
- }
- }
- }
-
- if (var5 != null && var2) {
- ((ClassLoader)this).resolveClass(var5);
- }
- } catch (IOException var10) {
- throw new ClassNotFoundException(var1);
- } catch (Throwable var11) {
- }
-
- return var5;
- }
- }
- }
- }
-